package com.cskaoyan.controller;

import com.cskaoyan.bean.BaseRespVo;
import com.cskaoyan.bean.User;
import com.cskaoyan.exception.MyValidationException;
import com.cskaoyan.util.ValidationUtil;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

@RestController
public class UserController {

    //localhost:8080/login?username=xxx&password=xxx
    @RequestMapping("login")
    public BaseRespVo login(@Validated User user) {
    //public BaseRespVo login(@Valid User user) {
        return BaseRespVo.ok();
    }

    @RequestMapping("register")
    public BaseRespVo register(@Validated User user, BindingResult bindingResult) {
        //如果校验不通过，就可以响应校验失败的Json
        //没有通过校验 👉
        // 只要你的有一个成员变量没有通过校验，这个值就是true;所有的都通过校验才会使false
        if (bindingResult.hasFieldErrors()) {
            //还可以进一步的获得校验结果
            FieldError fieldError = bindingResult.getFieldError();
            //成员变量名 → 请求参数名
            String field = fieldError.getField();
            //传入的错误的值是什么
            Object rejectedValue = fieldError.getRejectedValue();
            //默认的信息
            String defaultMessage = fieldError.getDefaultMessage();
            String message = "请求参数" + field + "因为传入了" + rejectedValue + "没有通过校验；" + defaultMessage;
            return BaseRespVo.fail(message);
        }

        return BaseRespVo.ok();
    }

    @RequestMapping("register2")
    public BaseRespVo register2(@Validated User user, BindingResult bindingResult) {
        //如果校验不通过，就可以响应校验失败的Json
        //没有通过校验 👉
        // 只要你的有一个成员变量没有通过校验，这个值就是true;所有的都通过校验才会使false
        if (bindingResult.hasFieldErrors()) {
            return ValidationUtil.valid(bindingResult);
        }
        return BaseRespVo.ok();
    }

    @RequestMapping("register3")
    public BaseRespVo register3(@Validated User user, BindingResult bindingResult) throws MyValidationException {
        //如果校验不通过，就可以响应校验失败的Json
        //没有通过校验 👉
        // 只要你的有一个成员变量没有通过校验，这个值就是true;所有的都通过校验才会使false
        ValidationUtil.valid3(bindingResult);//就算这个方法的返回值为void，也有办法响应json
        //如果校验成功，就可以当作无事发生，继续完成业务
        return BaseRespVo.ok();
    }
}
